Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用AWK替换列值_Linux_Shell_Unix_Awk - Fatal编程技术网

Linux 使用AWK替换列值

Linux 使用AWK替换列值,linux,shell,unix,awk,Linux,Shell,Unix,Awk,我有一个名为source data.lst(使用ls-l创建)的文件,其中包含以下信息: -rwxrwxrwx 1 soumyadipd soumyadipd 379 Apr 2 17:07 filegen.awk -rw-rw-r-- 1 soumyadipd soumyadipd 129 Mar 31 13:35 file_name_list.txt -rw-rw-r-- 1 soumyadipd soumyadipd 624 Apr 2 16:32 log -rw-r--r-- 1 s

我有一个名为source data.lst(使用ls-l创建)的文件,其中包含以下信息:

-rwxrwxrwx 1 soumyadipd soumyadipd 379 Apr  2 17:07 filegen.awk
-rw-rw-r-- 1 soumyadipd soumyadipd 129 Mar 31 13:35 file_name_list.txt
-rw-rw-r-- 1 soumyadipd soumyadipd 624 Apr  2 16:32 log
-rw-r--r-- 1 soumyadipd root         0 Apr  3 12:38 source-data.lst
-rw-rw-r-- 1 soumyadipd soumyadipd 676 Apr  2 16:32 temp
-rw-rw-r-- 1 soumyadipd soumyadipd 157 Mar 31 15:10 Type1_LP_OUT.txt
我需要将每行的文件大小更新1

通过从终端执行
awk'{$5=$5+1;print$0}'源数据.lst
,输出如下:

[soumyadipd@linuxpc awkscripts]$ awk '{ $5=$5+1; print $0 }' source-data.lst
-rwxrwxrwx 1 soumyadipd soumyadipd 380 Apr 2 17:07 filegen.awk
-rw-rw-r-- 1 soumyadipd soumyadipd 130 Mar 31 13:35 file_name_list.txt
-rw-rw-r-- 1 soumyadipd soumyadipd 625 Apr 2 16:32 log
-rw-r--r-- 1 soumyadipd root 1 Apr 3 12:38 source-data.lst
-rw-rw-r-- 1 soumyadipd soumyadipd 677 Apr 2 16:32 temp
-rw-rw-r-- 1 soumyadipd soumyadipd 158 Mar 31 15:10 Type1_LP_OUT.txt
[soumyadipd@linuxpc awkscripts]$
但问题是我有一个名为filegen.AWK的AWK脚本:

BEGIN{
      noOfSourceData=0;
    while ((getline data < "source-data.lst") > 0) {
        noOfSourceData++;
        sourceRecordsList[noOfSourceData] = data;
    }
}{

}END{
for (sd=1; sd<= noOfSourceData; sd++) {
#print sourceRecordsList[sd]
print sourceRecordsList[sd] > "temp"
awk '{ $5=$5+1; print $0 }' temp
}
}

请帮我做一个解决方案。。。提前感谢。

您可以从文件中使用
getline
而不是将
getline
用于变量
getline data

awk '
BEGIN{
    noOfSourceData=0;
    while ((getline < "source-data.lst") > 0) {
        noOfSourceData++;
        $5=$5+1;
        sourceRecordsList[noOfSourceData] = $0;
    }
}
{

}

END{
    for (sd=1; sd<= noOfSourceData; sd++)
        print sourceRecordsList[sd]
}' dummy.txt
awk'
开始{
noOfSourceData=0;
而((getline<“source data.lst”)>0){
noOfSourceData++;
$5=$5+1;
sourceRecordsList[noOfSourceData]=0美元;
}
}
{
}
结束{

对于(sd=1;sd我解决了我的问题,filegen.awk的代码如下:

BEGIN{
    noOfSourceData=0;
    while ((getline data < "source-data.lst") > 0) {
        noOfSourceData++;
        sourceRecordsList[noOfSourceData] = data;
    }
}{

}END{
for (sd=1; sd<= noOfSourceData; sd++) {
system("echo \"" sourceRecordsList[sd] "\" | awk '{ $5=$5+1; print $0 }'");
}
}
开始{
noOfSourceData=0;
而((getline数据<“source data.lst”)>0){
noOfSourceData++;
sourceRecordsList[noOfSourceData]=数据;
}
}{
}结束{

对于(SD=1;你需要什么?)使用LS-L的输出只是一个例子。你可以考虑任何带有表格数据的文件:1 SouMyDADP DAS 29印度2比尔先生46美国3 XYZ先生34没有调用AWK脚本中的“代码> AWK <代码>。你试图在代码< AWK内执行<代码> AWK <代码>,这显然不起作用。@ Lutz Horn和@Adrian Frühwirth:那怎么办?我不是在寻找这个答案。我的问题不同。@SoumyadipDas好的,那么这个答案有什么问题?@SoumyadipDas好的,太好了!这个脚本毫无意义。为什么要编写getline循环来完成awk自然完成的工作?为什么要使用awk创建一个数组来传递给系统调用shell调用echo使用管道调用awk,而不是在读取时简单地修改原始awk脚本中的每个输入行?仅
awk'$5+=1'源数据有什么问题。lst
?@EdMorton请先阅读完整的问题、答案和注释,然后询问您的困惑。之前我做了一个注释为:
“这是一件大事,我有一个数组包含.lst文件中所示的值(每一行.lst都是一个数组元素)。我必须按说明更改列的值。因此,我创建了这个示例以简化此操作。”
首先,试着理解真正的问题。在本页的任何地方,没有任何问题或评论会导致您的帖子成为正确的解决方案。要么是您没有告诉我们,要么是您提出了错误的解决方案。我在awk中开发了20多年,在shell中开发了30多年,我无法想象什么样的问题会导致你发布的解决方案在任何方面都是合理的,但如果你对此感到满意,那么祝你好运。
BEGIN{
    noOfSourceData=0;
    while ((getline data < "source-data.lst") > 0) {
        noOfSourceData++;
        sourceRecordsList[noOfSourceData] = data;
    }
}{

}END{
for (sd=1; sd<= noOfSourceData; sd++) {
system("echo \"" sourceRecordsList[sd] "\" | awk '{ $5=$5+1; print $0 }'");
}
}