对于不优雅的方法,请参阅下面的第四条单线。有用!!但你可能不想接受我的回答。该命令很嘈杂,您可能需要将注释添加为“文档”以使其可维护。出于这个原因,我也将它作为一个.awk
文件包含在下面:-)
尽管如此,即使文件的格式相当简单,我认为最好的方法是使用正则表达式作为@chepner 注释。,如果只是因为它记录了自己。
~/$ cat test.txt
[2013-06-17 13:30] [PACMAN] Running 'pacman -S cups'
[2013-06-17 13:30] [PACMAN] reinstalled cups (1.6.2-2)
1)第一栏:
~/$ awk -F '[\]]' '{print $1"]"}' test.txt
[2013-06-17 13:30]
[2013-06-17 13:30]
2)第一列和第二列:
~/$ awk -F '[\]]' '{print $1"]" $2"]" }' test.txt
[2013-06-17 13:30] [PACMAN]
[2013-06-17 13:30] [PACMAN]
3)所有三个:
~/$ awk -F '[\]]' '{print $1"]" $2"]" $3}' test.txt
[2013-06-17 13:30] [PACMAN] Running 'pacman -S cups'
[2013-06-17 13:30] [PACMAN] reinstalled cups (1.6.2-2)
4)同上,但将第三个字段拆分为数组a
以便打印Running
或reinstalled
单独打印。从第一个元素的偏移量 () 开始打印数组a
( ) 的子字符串。substr
os
length
~/$ awk -F ']' '{split($3,a," "); os=(length(a[1])+2) ; print $1"]" $2"] " a[1]" " substr($3,os) }' test.txt
[2013-06-17 13:30] [PACMAN] Running 'pacman -S cups'
[2013-06-17 13:30] [PACMAN] reinstalled cups (1.6.2-2)
这是 BSD awk
,所以它应该可以在 OSX 上运行。
# split.awk ... run with: awk -f split.awk data.txt
BEGIN{
FS="]" # Make the field separator be "]"
}
{
# Split the third field into array "a"
split($3,a," ")
os=(length(a[1])+2)
# Print the first two fields and a substring of array "a" (substr)
# starting at offset ("os") taken from the length of the first element
# right adjusted for two whitespaces.
print $1"]" $2"] " a[1]" " substr($3,os)
}
HTH。