How to assign value at run time in AWK command
I am using below command to remove line feeds with in field values.This sample commmand created for file having 3 attributes.
awk -F| '{while(NF<3 && getline p)$0=$0 p}1'
My input filess having different number of attributes, so I want to parameterize number of attributes value in AWK command. I tried like below but getting error.
NoAttributes=12
awk -F| '{while(NF<$NoAttributes && getline p)$0=$0 p}1'
Error Details:
awk: Field is not correct.
The input line number is 1.
The source line number is 1.
shell-script awk variable
add a comment |
I am using below command to remove line feeds with in field values.This sample commmand created for file having 3 attributes.
awk -F| '{while(NF<3 && getline p)$0=$0 p}1'
My input filess having different number of attributes, so I want to parameterize number of attributes value in AWK command. I tried like below but getting error.
NoAttributes=12
awk -F| '{while(NF<$NoAttributes && getline p)$0=$0 p}1'
Error Details:
awk: Field is not correct.
The input line number is 1.
The source line number is 1.
shell-script awk variable
add a comment |
I am using below command to remove line feeds with in field values.This sample commmand created for file having 3 attributes.
awk -F| '{while(NF<3 && getline p)$0=$0 p}1'
My input filess having different number of attributes, so I want to parameterize number of attributes value in AWK command. I tried like below but getting error.
NoAttributes=12
awk -F| '{while(NF<$NoAttributes && getline p)$0=$0 p}1'
Error Details:
awk: Field is not correct.
The input line number is 1.
The source line number is 1.
shell-script awk variable
I am using below command to remove line feeds with in field values.This sample commmand created for file having 3 attributes.
awk -F| '{while(NF<3 && getline p)$0=$0 p}1'
My input filess having different number of attributes, so I want to parameterize number of attributes value in AWK command. I tried like below but getting error.
NoAttributes=12
awk -F| '{while(NF<$NoAttributes && getline p)$0=$0 p}1'
Error Details:
awk: Field is not correct.
The input line number is 1.
The source line number is 1.
shell-script awk variable
shell-script awk variable
edited Jan 26 at 12:41
Jeff Schaller
40.9k1056130
40.9k1056130
asked Jan 26 at 12:27
chava kumarchava kumar
183
183
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
To set an awk
variable on the command line, use -v variable=value
:
awk -v attrs=2 '{ ... NF < attrs && ... }'
You may also access environment variables by using ENVIRON["variable"]
in the awk
code:
export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
The last two variations would not set attrs
in the invoking environment, only for the awk
program (and any processes it may possibly start).
A third way is to give variable=value
as a "filename" argument:
awk '...' msg="hello" file1 file2 msg="good bye" file3 file4
This would set the awk
variable msg
to the string hello
before starting to process the file file1
. It would retain that value until the value is change to good bye
just before processing file3
. Note that variables set in this way would not be available inside any BEGIN
block in the awk
code.
Injecting shell variables directly into the awk
code by means of a variable expansion in the string that constitutes the code is not a good way of transferring data into an awk
program, and should be avoided.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f496869%2fhow-to-assign-value-at-run-time-in-awk-command%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
To set an awk
variable on the command line, use -v variable=value
:
awk -v attrs=2 '{ ... NF < attrs && ... }'
You may also access environment variables by using ENVIRON["variable"]
in the awk
code:
export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
The last two variations would not set attrs
in the invoking environment, only for the awk
program (and any processes it may possibly start).
A third way is to give variable=value
as a "filename" argument:
awk '...' msg="hello" file1 file2 msg="good bye" file3 file4
This would set the awk
variable msg
to the string hello
before starting to process the file file1
. It would retain that value until the value is change to good bye
just before processing file3
. Note that variables set in this way would not be available inside any BEGIN
block in the awk
code.
Injecting shell variables directly into the awk
code by means of a variable expansion in the string that constitutes the code is not a good way of transferring data into an awk
program, and should be avoided.
add a comment |
To set an awk
variable on the command line, use -v variable=value
:
awk -v attrs=2 '{ ... NF < attrs && ... }'
You may also access environment variables by using ENVIRON["variable"]
in the awk
code:
export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
The last two variations would not set attrs
in the invoking environment, only for the awk
program (and any processes it may possibly start).
A third way is to give variable=value
as a "filename" argument:
awk '...' msg="hello" file1 file2 msg="good bye" file3 file4
This would set the awk
variable msg
to the string hello
before starting to process the file file1
. It would retain that value until the value is change to good bye
just before processing file3
. Note that variables set in this way would not be available inside any BEGIN
block in the awk
code.
Injecting shell variables directly into the awk
code by means of a variable expansion in the string that constitutes the code is not a good way of transferring data into an awk
program, and should be avoided.
add a comment |
To set an awk
variable on the command line, use -v variable=value
:
awk -v attrs=2 '{ ... NF < attrs && ... }'
You may also access environment variables by using ENVIRON["variable"]
in the awk
code:
export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
The last two variations would not set attrs
in the invoking environment, only for the awk
program (and any processes it may possibly start).
A third way is to give variable=value
as a "filename" argument:
awk '...' msg="hello" file1 file2 msg="good bye" file3 file4
This would set the awk
variable msg
to the string hello
before starting to process the file file1
. It would retain that value until the value is change to good bye
just before processing file3
. Note that variables set in this way would not be available inside any BEGIN
block in the awk
code.
Injecting shell variables directly into the awk
code by means of a variable expansion in the string that constitutes the code is not a good way of transferring data into an awk
program, and should be avoided.
To set an awk
variable on the command line, use -v variable=value
:
awk -v attrs=2 '{ ... NF < attrs && ... }'
You may also access environment variables by using ENVIRON["variable"]
in the awk
code:
export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
or,
env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'
The last two variations would not set attrs
in the invoking environment, only for the awk
program (and any processes it may possibly start).
A third way is to give variable=value
as a "filename" argument:
awk '...' msg="hello" file1 file2 msg="good bye" file3 file4
This would set the awk
variable msg
to the string hello
before starting to process the file file1
. It would retain that value until the value is change to good bye
just before processing file3
. Note that variables set in this way would not be available inside any BEGIN
block in the awk
code.
Injecting shell variables directly into the awk
code by means of a variable expansion in the string that constitutes the code is not a good way of transferring data into an awk
program, and should be avoided.
edited Jan 26 at 13:04
answered Jan 26 at 12:38
KusalanandaKusalananda
128k16241398
128k16241398
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f496869%2fhow-to-assign-value-at-run-time-in-awk-command%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown