我有一个名为 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 }' source-data.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
}
}
使用此 filegen.awk 我必须增加 source-data.lst 的文件大小。因此,执行如下脚本我发现以下错误:
[soumyadipd@linuxpc awkscripts]$ awk -f filegen.awk source-data.lst > log
awk: filegen.awk:16: awk '{ $5=$5+1; print $0 }' temp
awk: filegen.awk:16: ^ invalid char ''' in expression
[soumyadipd@linuxpc awkscripts]$
请帮我解决问题......提前谢谢。
答案 0 :(得分:0)
不是将getline
用于变量getline data < "source-data.lst"
,而是只使用文件中的getline
:
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
答案 1 :(得分:0)
我解决了我的问题, 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 }'");
}
}
在搜索解决方案时,我从here得到了一点意见。
感谢大家的回复。