【问题标题】:Specific a delimiter to separate data into columns指定分隔符以将数据分成列
【发布时间】:2025-12-23 07:05:07
【问题描述】:

我有一组数据名称 Book.txt,我想在 shell 中显示它们。但是我在尝试使用特定分隔符将我的数据分组到列中时遇到问题

Book.txt 包含:

Harry Potter 1:Author1:100
Lord Of The Rings:Author2:200

我可以使用以下代码在 Book.txt 中显示数据:

awk -F':' '{print $1 "\t" $2}' ./Book.txt 

但是我希望它们在列中很好地排列,所以我尝试使用管道列

awk -F':' '{print $1 "\t" $2}' ./Book.txt | column -s "/t"

但是当我尝试它时,它似乎不起作用。我不能使用 column -t 因为我的标题有空格并且它充当分隔符。我想改用“制表符”作为分隔符

【问题讨论】:

    标签: linux shell ubuntu awk


    【解决方案1】:

    这说明了标题和最后一列的删除:

    $ cat file 
    Book Header
    Harry Potter 1:Author1:100
    Lord Of The Rings:Author2:200
    
    $ awk -F':' -v OFS=':' '{print $1, $2}' file | column -s: -t
    Book Header
    Harry Potter 1     Author1
    Lord Of The Rings  Author2
    

    【讨论】:

    • 嘿 sudo 谢谢它的工作原理!但你能解释一下这是做什么的吗? '开始{FS=OFS=":"}
    • 你已经知道 FS 是用 -F 设置的,这是字段分隔符变量,在这种情况下是 :OFS 它是我们也设置为的输出字段分隔符: 以便字段分隔符不会被 awk 更改,从而允许 column 使用 -s: 做到这一点很神奇。如果它是最有用的,请点击它旁边的复选标记接受这个答案。
    【解决方案2】:

    可以直接使用column命令吗?

    column -s ":" -t Book.txt

    结果:

    Harry Potter 1     Author1  100
    Lord Of The Rings  Author2  200
    

    【讨论】:

    • 抱歉在 cygwin.. column 代替
    • 现在可以了!这段代码很短,但正是我想要的。谢谢!
    • @user1958567 这留在第三列?
    • @sudo_O 是的,它还打印出第三列
    • @user1958567 你只希望第一列和第二列显示正确?