目前,我有一个Results.txt
包含 27k 行的文件 ( )。文件内容如下。
45008657 | A. | | Long | 0
49210987 | A. | | Steven | 3262
49600694 | A. | | Steven | 4772
467814 | A. | Rafeal | Nadal| 4133
53111047 | A. | Mike | Tyson | 13484
Run Code Online (Sandbox Code Playgroud)
我需要删除多余的空格,如下所示。
cat Results.txt | tr -d " \t\r" > Results1.txt
Run Code Online (Sandbox Code Playgroud)
文件 ( Results1.txt
) 格式整齐,没有多余的空格。
45008657|A.||Long|0
49210987|A.||Steven|3262
49600694|A.||Steven|4772
467814|A.|Rafeal|Nadal|4133
53111047|A.|Mike|Tyson|13484
Run Code Online (Sandbox Code Playgroud)
现在,我需要将所有字母转换为小写,并将第 2 列附加到第 4 列。
awk 'BEGIN { FS = "|" } ; { print $1"|"tolower($2) tolower($3) tolower($4)"|"$5 }' Results1.txt > Results2.txt
Run Code Online (Sandbox Code Playgroud)
我的Results2.txt
文件将如下所示。
45008657|a.long|0
49210987|a.steven|3262
49600694|a.steven|4772
467814|a.rafealnadal|4133
53111047|a.miketyson|13484
Run Code Online (Sandbox Code Playgroud)
有什么办法可以在我的初始文件 ( Results.txt
) 本身中完成上述所有步骤?我想减少文件的过度使用,以便在后期阶段进行调试。
编辑:我只是不想在创建一个新文件后删除这些文件,这对我来说似乎不是一个优雅的解决方案。
Sté*_*las 10
使用 GNU sed
:
sed -i 's/\s//g;s/\(|[^|]*\)|\([^|]*\)|/\1\2/;s/.*/\L&/' Results.txt
Run Code Online (Sandbox Code Playgroud)
确实,您不需要临时文件。
awk -F'|' '{gsub("[ \t\r]", "", $0)}{print $1,tolower($2$3$4),$5}' OFS='|' inputfile
Run Code Online (Sandbox Code Playgroud)
表达式的第一部分执行您使用tr
. 第二部分组合字段 2-4 并将它们小写并与其他两个字段一起打印。
对于您的输入,它会产生:
45008657|a.long|0
49210987|a.steven|3262
49600694|a.steven|4772
467814|a.rafealnadal|4133
53111047|a.miketyson|13484
Run Code Online (Sandbox Code Playgroud)
GNU awk 4.1.0 及更高版本支持就地编辑。你可以说:
awk -i inplace -F'|' '{gsub("[ \t\r]", "", $0)}{print $1,tolower($2$3$4),$5}' OFS='|' inputfile
Run Code Online (Sandbox Code Playgroud)