我有一个大的制表符分隔的4列的.txt文件
col1 col2 col3 col4
name1 1 2 ens|name1,ccds|name2,ref|name3,ref|name4
name2 3 10 ref|name5,ref|name6
... ... ... ...
现在我想从这个文件中提取以' ref |'开头的所有内容。此模式仅存在于col4
中因此,对于此示例,我希望将其作为输出
ref|name3
ref|name4
ref|name5
ref|name6
我想过使用' sed'为此,但我不知道从哪里开始。
答案 0 :(得分:5)
我认为awk
更适合这项任务:
$ awk '{for (i=1;i<=NF;i++){if ($i ~ /ref\|/){print $i}}}' FS='( )|(,)' infile
ref|name3
ref|name4
ref|name5
ref|name6
FS='( )|(,)'
按FS
和,
设置多列blank spaces
到列的列,然后在找到ref
模式时打印列。
答案 1 :(得分:4)
现在我想从这个文件中提取所有开头的内容 &#39; REF |&#39 ;. 此模式仅出现在col4
中
如果您确定该模式仅存在于col4中,则可以使用grep:
grep -o 'ref|[^,]*' file
输出:
ref|name3
ref|name4
ref|name5
ref|name6
答案 2 :(得分:2)
我的一个解决方案是首先使用awk
来获取第4列,然后使用sed
将逗号转换为换行符,然后使用grep
(或{{1}再次)获取以awk
开头的那些:
ref
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed 's/\(ref|[^,]*\),/\n\1\n/;/^ref/P;D' file
按换行符绕所需的字符串,只打印那些以所需字符串开头的行。