我想从制表符分隔的文件中删除某些行,并将输出写入新文件。
a b c 2017-09-20
a b c 2017-09-19
es fda d 2017-09-20
es fda d 2017-09-19
第4列是日期,基本上我只想将第4列的行保留为“2017-09-19”(保留第2行和第4行)并写入新文件。新文件的格式应与原始文件的格式相同。
如何为此示例编写linux命令?
注意:搜索条件应位于第4个字段,因为我在实际数据中有其他字段,并且可能与第4个字段具有相同的值。
答案 0 :(得分:1)
使用grep
过滤:
cat file.txt | grep '2017-09-19' > filtered_file.txt
这并不完美,因为字符串2017-09-19
不需要出现在第4列中,但如果您的文件看起来像示例,那么它将起作用。
答案 1 :(得分:1)
使用awk:
awk 'BEGIN{OFS="\t"} $4=="2017-09-19"' file
OFS
:输出字段分隔符,默认为空格
答案 2 :(得分:1)
Sed解决方案:
sed -nr "/^([^\t]*\t){3}2017-09-19/p" input.txt >output.txt
这是:
-n
- 不输出每一行-r
- 延长常规表现/regexp/p
- 包含正则表达式的打印行 regexp ^
- 行开头(regexp){3}
- 重复regexp 3次[^\t]
- 除标签\t
- 制表符*
- 多次重复字符2017-09-19
- 搜索文字也就是说,跳过从行开头用制表符分隔的3列,然后检查第4列的值是否与所需的值一致。
答案 3 :(得分:0)
awk '/2017-09-19/' file >newfile
cat newfile
a b c 2017-09-19
es fda d 2017-09-19