我有一个5000行文本文档,我想逐行阅读。我想将每行写入另一个文本文件,具体取决于它有多少列。每列由a分隔,其由“|”分隔。这样做的最快方法是什么?
编辑:我忘记了文件每个部分的关键细节,每个部分用@,#或$分隔。每一行也必须输出到适当的部分示例:
cat File.txt
@
01|02|03|04|05|06|07|08|09|10
11|12|13|14|15|16|17|18
21|22|23|24|25
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
51|52|53|54|55
61|62|63|64|65|66|67|68
71|72|73|74|75|76|77|78|79|80
输出(例如3个文件)
cat Ten.txt
@
01|02|03|04|05|06|07|08|09|10
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
71|72|73|74|75|76|77|78|79|80
cat Eight.txt
@
11|12|13|14|15|16|17|18
#
61|62|63|64|65|66|67|68
cat Five.txt
@
21|22|23|24|25
#
51|52|53|54|55
答案 0 :(得分:2)
这可能有用:
awk -F\| '{ print > "columns-" + NF + ".dat"}' File.txt
它不会将数字翻译成英文,但它会将每一行写入一个名为的文件,例如: columns-10.dat
代表有10列的行...
答案 1 :(得分:0)
awk
例如:
$> awk -F "|" '{if (NF >= 10) {print}}' File.txt
01|02|03|04|05|06|07|08|09|10
答案 2 :(得分:0)
这是使用awk
执行此操作以查找包含10列的所有行的单行内容:
awk -F'|' '{if (NF==10) {print $0} }'
更一般地说:
#!/bin/bash
awk -F'|' -v cols=$1 '{if (NF==cols) {print $0} }'
答案 3 :(得分:0)
infile.txt:
@
01|02|03|04|05|06|07|08|09|10
11|12|13|14|15|16|17|18
21|22|23|24|25
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
51|52|53|54|55
61|62|63|64|65|66|67|68
71|72|73|74|75|76|77|78|79|80
$
41|42|43|44|45|46|47|48|49|90
Long Awk单线(可能不必要的长):
awk -F "|" '{if ($0 == "@") {print $0} else {;if ($0 == "\#") {print $0} else {;if (NF == 10) {print $0};}}}' infile.txt > tens.txt
tens.txt
@
01|02|03|04|05|06|07|08|09|10
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
71|72|73|74|75|76|77|78|79|80
$
41|42|43|44|45|46|47|48|49|90
然后将条款(NF == 10)
更改为每次运行时所需的内容。