1

我正在学习 bash,我有一个包含 500000 行的文件,每个文件都有这种模式:

NNNNNNNN NNNNNN C

N = 数字 | C = 字符 AZ | 第一个空格是制表符,第二个是常规空格。

我想创建一个包含最后一部分的文件,从第二列数字(NNNNNN C)开始,使用 bash 脚本。我能够做到这一点:

i=1
while [ $i -le 500000 ]
do
    echo $i
    sed $i"q;d" $1 | tail -c 9 >> file
    ((i++))
done

但这需要很长时间,因为它将每一行逐一写入文件。我怎样才能更快地做到这一点?

谢谢

4

3 回答 3

2

您可以使用read将每一行拆分为单词,然后打印您想要的单词:

while read a b c; do
  echo "$b $c"
done < input_file > output_file
于 2013-03-08T21:49:02.147 回答
1

是的,这需要一段时间。虽然使用 bash 值得称赞您的 DIY 精神,但此类任务通常由专为此类任务设计的 unix 工具来处理。

尝试这个

 sed 's/^.*<T>//' file > outFile

'\t' 或文字制表符在哪里<T>,具体取决于您的 sed 版本。

这将删除文件中每一行的第一个选项卡之前的所有内容,然后将剩下的内容打印到 outFile 中。

IHTH。

于 2013-03-08T21:49:35.237 回答
1

Use cut,默认情况下使用制表符作为分隔符。

读取infile字段 ( -f) 2 向前 ( 2-) 并将其放入file

cut -f2- infile > file
于 2013-03-08T21:51:02.680 回答