我们如何使用bash自动化Linux cut命令

时间:2018-07-29 19:59:59

标签: linux bash unix

假设我有一个包含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;

2 个答案:

答案 0 :(得分:1)

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

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

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

OP评论:

  

列数不固定

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

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

答案 1 :(得分:1)

给出:

pub trait Point<I: PartialEq> {
    fn id(&self) -> I;
}

pub struct Connection<T> {
    pub to: T
}

impl<T> Connection<T> {
    pub fn is_connected_to<I: PartialEq>(&self, point: T) -> bool
    where
        T: Point<I>
    {
        self.to.id() == point.id()
    }
}

pub fn main() {
    struct SimplePoint;
    impl Point<char> for SimplePoint{
        fn id(&self) -> char { return 'A' }
    }

    let a = SimplePoint {};

    let conn = Connection {
        to: a
    };
}

您可以使用$ 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