use*_*694 4 grep sed awk text-processing
如何修改文件的以下内容:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Run Code Online (Sandbox Code Playgroud)
到 :
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Run Code Online (Sandbox Code Playgroud)
它不是特定于狗或猫的,它更像是第一个单词/术语的象征性表示
Sté*_*las 11
你可以这样做:
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
Run Code Online (Sandbox Code Playgroud)
该""
是力量字符串比较。没有它,它将无法在输入中正常工作,例如:
100:foo
100:bar
1e2:baz
1e2:biz
Run Code Online (Sandbox Code Playgroud)
Where100
和1e2
将作为数字进行比较。
这是一种方法。如果第一个字段与前一行中的字段不同,则打印一个中断....
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
Run Code Online (Sandbox Code Playgroud)
解释:
-F:
= 将字段分隔符设置为 :
$1!=a&&a
= 如果第一个字段不等于变量“a”(前一个第一个字段),并且变量“a”设置为某个值(即我们不处理文件中的第一行){print ""}
= 打印一个空行{a=$1}
= 对于每行读取,将变量“a”设置为第一个字段1
= 打印行