Take nth column in a text file

前端 未结 6 1059
小蘑菇
小蘑菇 2020-11-29 20:22

I have a text file:

1 Q0 1657 1 19.6117 Exp
1 Q0 1410 2 18.8302 Exp
2 Q0 3078 1 18.6695 Exp
2 Q0 2434 2 14.0508 Exp
2 Q0 3129 3 13.5495 Exp

6条回答
  •  抹茶落季
    2020-11-29 20:33

    If your file contains n lines, then your script has to read the file n times; so if you double the length of the file, you quadruple the amount of work your script does — and almost all of that work is simply thrown away, since all you want to do is loop over the lines in order.

    Instead, the best way to loop over the lines of a file is to use a while loop, with the condition-command being the read builtin:

    while IFS= read -r line ; do
        # $line is a single line of the file, as a single string
        : ... commands that use $line ...
    done < input_file.txt
    

    In your case, since you want to split the line into an array, and the read builtin actually has special support for populating an array variable, which is what you want, you can write:

    while read -r -a line ; do
        echo ""${line[1]}" "${line[3]}"" >> out.txt
    done < /path/of/my/text
    

    or better yet:

    while read -r -a line ; do
        echo "${line[1]} ${line[3]}"
    done < /path/of/my/text > out.txt
    

    However, for what you're doing you can just use the cut utility:

    cut -d' ' -f2,4 < /path/of/my/text > out.txt
    

    (or awk, as Tom van der Woerdt suggests, or perl, or even sed).

提交回复
热议问题