如何在bash中获取文件的第n行?

时间:2019-09-05 07:59:08

标签: bash shell sh

我想从名为datax.txt的文件中提取第二行:

0/0/0/0/0/0   |   0/0/0/0/0/0   |   0/0/0/0/0/0

然后我想将3个序列0/0/0/0/0/0存储在3个变量中。

我应该怎么做?

4 个答案:

答案 0 :(得分:3)

将第二行读入变量abc

read a b c <<< $(awk -F'|' 'NR==2{print $1 $2 $3}' datax)

答案 1 :(得分:1)

关键是将问题分成两部分:

  • 您要获取文件的第n行->请参见here
  • 您要根据定界符将行分割成一行->这是许多工具的工作,cut是其中之一

对于将来的问题,请确保包括更完整的数据集,这是目前的数据集。我对第二行进行了一些更改,以便我们可以验证是否获得了正确的列:

f.txt

4/4/4/4/4/4 | 4/4/4/4/4/4 | 4/4/4/4/4/4
0/0/0/0/a/0 | 0/0/0/0/b/0 | 0/0/0/0/c/0
8/8/8/8/8/8 | 8/8/8/8/8/8 | 8/8/8/8/8/8
8/8/8/8/8/8 | 8/8/8/8/8/8 | 8/8/8/8/8/8

然后基于上述两个关键操作构建适当的脚本:

extract.bash

file=$1
target_line=2

# get the n-th line
# https://stackoverflow.com/questions/6022384/bash-tool-to-get-nth-line-from-a-file
line=$(cat $file | head -n $target_line | tail -1)

# get the n-th field on a line, using delimiter '|'
var1=$(echo $line | cut --delimiter='|' --fields=1)
echo $var1
var2=$(echo $line | cut --delimiter='|' --fields=2)
echo $var2
var3=$(echo $line | cut --delimiter='|' --fields=3)
echo $var3

aaand:

$ ./extract.bash f.txt
0/0/0/0/a/0
0/0/0/0/b/0
0/0/0/0/c/0

答案 2 :(得分:0)

请尝试以下操作:

IFS='|' read a b c < <(sed -n 2P < datax | tr -d ' ')

然后将变量a,b和c分配给第二行的每个字段。

答案 3 :(得分:0)

您可以使用sed打印文件的特定行,因此对于您的示例,在第二行:

sed -n -e 2p ./datax

将sed的输出设置为变量:

Var=$(sed -n -e 2p ./datax)

然后将字符串分成所需的3个变量:

 A="$(echo $Var | cut -d'|' -f1)"
 B="$(echo $Var | cut -d'|' -f2)"
 C="$(echo $Var | cut -d'|' -f3)"