使用args从分隔文件中捕获列

时间:2014-02-19 05:53:16

标签: linux bash sed awk

我有以下文件:

123 | xyz | abc | abc | abc | 567
321 | xyz | abc | abc | abc | 765

我编写了这个脚本来捕获first | last列:

#!/bin/bash
line=$(cat input.txt | sed 's/ //g')
args=(${line//|/ })
x="${args[0]}"
y="${args[11]}"
echo $x
echo $y

结果是:

123
765

如何获得以下结果:

123 | 567
321 | 765

由于

4 个答案:

答案 0 :(得分:3)

您可以使用sed

sed 's/|.*|/|/' input.txt

答案 1 :(得分:3)

我可以通过cut

获取它
$ cut -f1,6 -d"|" input.txt
123 | 567
321 | 765

答案 2 :(得分:1)

您可以使用awk:

awk -F '[| ]+' '{print $1, $NF}' OFS=' | ' file
123 | 567
321 | 765

在纯BASH中执行此操作:

while IFS=' | ' read -a arr
    echo "${arr[0]} | ${arr[@]:(-1)}"
done < file
123 | 567
321 | 765

答案 3 :(得分:1)

以下是bash中的一种方法:

$ cat file 
123 | xyz | abc | abc | abc | 567
321 | xyz | abc | abc | abc | 765

$ while IFS="|" read -ra line; do 
    echo "${line[0]}|${line[${#line[@]}-1]}"
done < file
123 | 567
321 | 765