linux - 使用 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 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;从终端打印 $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]$

请帮助我制定解决方案...提前致谢。

最佳答案

而不是使用 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

关于linux - 使用 AWK 替换列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22830741/

相关文章:

linux - 检查 bash 中的命令是否输出了正确的动态值和字符串

c - 内部捕获/重定向标准输出?

bash - 除了 .bashrc 和 .bash_profile,我的环境变量在哪里?

linux - 由于访问被拒绝,无法将 CSV 复制到数据库表

linux - 如何在传出数据包上插入 VLAN 标记

regex - 有没有一种方法可以使用 grep(或任何其他工具)过滤文本文件,以便您可以获得包含在大括号或方括号中的文件部分?

linux - 使用 systemctl 或服务命令在 CentOS7 中不会提示用户输入

regex - 使用 REGEX 与 Groovy 和 SED 替换值

bash - 未从 bash 脚本运行 SED 命令

linux - 关于 grep 命令