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

如何在bash中获取文件的第n行?,bash,shell,sh,Bash,Shell,Sh,我想从名为datax.txt的文件中提取第二行: 0/0/0/0/0/0 | 0/0/0/0/0/0 | 0/0/0/0/0/0 然后我想在3个变量中存储3个序列0/0/0/0/0 我该怎么办?关键是将问题一分为二: 要获取文件的第n行->请参见 如果您想根据分隔符将一行分割成块->这是许多工具的工作,cut就是其中之一 对于将来的问题,请确保包含一个更完整的数据集,下面是一个。我对第二行做了一些更改,以便我们可以验证我们得到了正确的列: f.txt 4/4/4/4/4/4

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

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


我该怎么办?

关键是将问题一分为二:

  • 要获取文件的第n行->请参见
  • 如果您想根据分隔符将一行分割成块->这是许多工具的工作,
    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
然后,在上述两个关键操作的基础上构建适当的脚本:

提取.bash

file=$1
目标线=2
#获取第n行
# https://stackoverflow.com/questions/6022384/bash-tool-to-get-nth-line-from-a-file
行=$(cat$文件|头-n$目标|尾-1)
#使用分隔符“|”获取行上的第n个字段
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
aa和:

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

将第二行读入变量
a
b
c

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

阅读a b c请尝试以下操作:

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

IFS=“|”read a b c<您可以使用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)"

事实上还有更多的空格:0/0/0/0/0/0 | 0/0/0/0/0 | 0/0/0/0/0/0有3个,我如何绕过它们?否则,它适用于第一个序列我不明白你所说的
有3个
-你是说每行有可变数量的空格吗?我建议您上传一段
datax.txt
文件