文字如下:
1.6M 2014-08-21 20:56 ./file1
1.6M 2014-08-22 10:59 ./file2
24K 2014-08-26 10:39 ../file3
0 2014-08-21 14:12 ./file4
0 2014-08-22 18:05 ../file5
1.5M 2014-08-22 04:15 ./file6
8.0K 2014-08-20 20:31 ../file7
我希望输出按时间排序:
8.0K 2014-08-20 20:31 ../file7
0 2014-08-21 14:12 ./file4
1.6M 2014-08-21 20:56 ./file1
1.5M 2014-08-22 04:15 ./file6
1.6M 2014-08-22 10:59 ./file2
0 2014-08-22 18:05 ../file5
24K 2014-08-26 10:39 ../file3
然后我希望删除前导./
,但不要../
,只打印尺寸和文件名...
到目前为止,我已经:
sort -k 2 | awk 'BEGIN{FS="\t"; OFS="\t"} {gsub(/.\//, ""); print}'
给出了:
8.0K .file7
0 file4
1.6M file1
1.5M file6
1.6M file2
0 .file5
24K .file3
如何让gsub仅适用于coloumn 3的开头(前2个字符),以便../fileX
不会成为.fileX
?
答案 0 :(得分:3)
我想通了......非常接近:),只需稍微改变gsub命令
<强>被修改强>
{gsub(/^\.\//, "", $3)
答案 1 :(得分:2)
很高兴你找到了出路。这是我用sed的解决方案。
sort -k 2 tt | sed -r 's| \.{1}/| |'
示例:
sdlcb@Goofy-Gen:~/AMD$ sort -k 2 tt | sed -r 's| \.{1}/| |'
8.0K 2014-08-20 20:31 ../file7
0 2014-08-21 14:12 file4
1.6M 2014-08-21 20:56 file1
1.5M 2014-08-22 04:15 file6
1.6M 2014-08-22 10:59 file2
0 2014-08-22 18:05 ../file5
24K 2014-08-26 10:39 ../file3
这里的想法是简单地删除前面有空格的“./”。即删除“./”或换句话说,将“./”替换为“”(空格)。用空格代替只是为了保持缩进。 -r in sed命令用于正则表达式支持。 sed's | a | b |'表示用“b”代替第一次出现的“a”。因此在我们的例子中,替换发生在's |中。{1} / | |。 “。{1} /”表示“单个空格后跟1'。'字符”。点字符需要转义,否则sed会将其解释为任何字符。