我们如何使用bash自动执行Linux cut命令?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (96)

假设我有一个包含4列的文本文件,我必须剪切每一列并将其保存到另一个文本文件中。我可以通过以下Linux命令执行此操作,但我想使用bash脚本自动执行此过程:

cut  textfile.txt | cut -d ":" -f1 > output1.txt

cut  textfile.txt | cut -d ":" -f2 > output2.txt

cut  textfile.txt | cut -d ":" -f3 > output3.txt

cut  textfile.txt | cut -d ":" -f4 > output4.txt

TextFile.txt:

"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"

col 1应存储在output1.txt中:

text1;
text1;
text1;
text1;
text1;
text1;

col 2应存储在output2.txt中:

text2;
text2;
text2;
text2;
text2;
text2;

col 3应存储在output3.txt中:

text3;
text3;
text3;
text3;
text3;
text3;

col 4应存储在output4.txt中:

text4;
text4;
text4;
text4;
text4;
text4;
提问于
用户回答回答于

这个awk单行程序适用于给定的示例输入:

awk -F':' '{for(i=1;i<=NF;i++)print $i>"output"i".txt"}' file

执行此命令后,你将获得output1-4.txt作为结果。

如果输入文件有很多列,则需要关闭文件并将文本附加到文件中:

awk -F':' '{for(i=1;i<=NF;i++){f="output"i".txt;print $i>>f;close(f)}' file
用户回答回答于
$ cat file
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"

你可以用awk将其转化为栏:

$ awk -F: '{for (i=1;i<=NF;i++) print $i>"file" i ".txt"}' file

你可以删除引号字符并添加;有:

awk -F: '{for (i=1;i<=NF;i++) {
                gsub(/"/,"",$i) 
                print $i ";">"file" i ".txt"}}' file

结果:

$ cat file{1..4}.txt
text1;
text1;
text1;
text2;
text2;
text2;
text3;
text3;
text3;
text4;
text4;
text4;

扫码关注云+社区

领取腾讯云代金券