0

我有一个 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
4

4 回答 4

2

类似这样的东西可能会起作用:

awk -F\| '{ print > "columns-" + NF + ".dat"}' File.txt

它不会将数字翻译成英文,但会将每一行写入一个名为的文件,例如columns-10.dat对于有 10 列的行......

于 2012-11-09T20:33:28.357 回答
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

十.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)然后在每次运行时将子句更改为您想要的任何内容。

于 2012-11-09T23:09:56.617 回答
0
  • 利用awk
  • 设置分隔符
  • 打印列数大于或等于 N 的行。

例如:

$> awk -F "|" '{if (NF >= 10) {print}}' File.txt
01|02|03|04|05|06|07|08|09|10
于 2012-11-09T20:33:26.083 回答
0

这是一个单行代码来awk查找所有包含 10 列的行:

awk -F'|' '{if (NF==10) {print $0} }'

更普遍:

#!/bin/bash

awk -F'|' -v cols=$1 '{if (NF==cols) {print $0} }'
于 2012-11-09T20:33:32.877 回答