我有一个标签分隔文件,格式如下:
January Jay RESERVED 4
February Jay RESERVED 5
March Jay SUBMITTED 6
December Jay USED 7
我想要做的是在第三列唯一的行之间创建空格或新行。
对于这个例子,我想要这个输出:
January Jay RESERVED 4
February Jay RESERVED 5
March Jay SUBMITTED 6
December Jay USED 7
答案 0 :(得分:1)
如果您的数据位于名为stuff的文件中:
lastVal="";cat stuff |while read i ; do thisVal=$(echo "$i" |cut -d$'\t' -f'3'); if [ "$lastVal" != "$thisVal" ]; then echo "" ;lastVal=$thisVal; fi ;echo "$i" ;done
这是您可以用作脚本的同一命令的版本。请参阅下面的用法。
#!/bin/bash
lastVal="";
while read i ; do
thisVal=$(echo "$i" |cut -d$'\t' -f'3')
if [ "$lastVal" != "$thisVal" ]; then
echo ""
lastVal=$thisVal
fi
echo "$i"
done
如果您将脚本命名为myScript.bash,则可以使用以下两种方法之一:
cat yourfile | /path/to/myScript.bash
或
/path/to/MyScript.bash < yourfile
请注意,如果要在Bash提示符处插入文字选项卡,可以输入ctrl + v然后单击选项卡。 Ctrl + v也允许您插入其他特殊字符。 Ctrl + v允许你输入像tab这样的特殊字符,所以要在cut -d'部分添加TAB作为分隔符,点击ctrl-v然后点击tab(在Linux中,而不是SO)。
答案 1 :(得分:0)
Awk可以非常轻松地做到这一点:
awk -F $'\t' '{print (v==$3 ? $0 : "\n"$0); v=$3}' foo.txt
awk
旨在处理以空格分隔的数据列,因此第三列由$3
表示。我们所做的只是检查值是否已更改,print
是否有额外的行。
这不检查“唯一”值,而只检查上一行值的变化。据我所知,这与你接受的答案是一样的。