这个bash脚本代码行是什么意思

时间:2017-11-16 10:24:34

标签: shell awk pipe

我是shell脚本的新手,我在给定的脚本中找到了以下代码行。

有人可以用一个例子向我解释下面的代码行是什么意思

Path=`echo $line | awk -F '|' '{print $1}'`

5 个答案:

答案 0 :(得分:0)

echo $line将打印变量$line的值,|符号表示将其输出(或settings)传递给另一个程序/命令/脚本。我不会在这里解释piped,但上面做的是echo $line的输出被采用并处理。
根据awk手册页选项-FS意味着

  

-F fs将fs用于输入字段分隔符

所以后面的字符串将用于将给予awk的输入字符串拆分成不同的字段。例如,变量$line的值为a|b,它将分为两个字段ab。在'{}'表达式中指定了要做什么。 同样,在那里可以做的就是无限,这里唯一要做的就是打印第一个可以使用$1访问的字段,或者在上面的示例中使用a($ 2会可以猜到b

最后,整个操作的输出然后存储在变量Path中。

总结:

line="a|b"
echo $line | awk -F '|' '{print $1}'
> a
Path=`echo $line | awk -F '|' '{print $1}'`
echo $Path
> a

答案 1 :(得分:0)

echo $line | awk -F '|' '{print $1}'

说明:

echo -> display a line of text
$line -> parameter expansion read the line
| -> A  pipeline is a sequence of one or more commands separated by one of the control operators |
awk -> Invoke awk program
-F '|' -> Field separator as | for the data feed
'{print $1}' -> Print the first field

示例

echo 'a|b|c' | awk -F '|' '{print $1}'

将打印a

答案 2 :(得分:0)

我认为这只是一种复杂的表达方式

 echo ${line%%|*}

即。写入stdout变量line内容的一部分,该变量上升到 - 但不包括 - 第一个垂直条。

答案 3 :(得分:0)

Path=`echo $line | awk -F '|' '{print $1}'`
 ^           ^             ^           ^
 |           |             |           |
 |           |             |           print 1st column
 |           |             |
 |           |           input field separator
 |           |
 |          echo variable line
 | 
variable Path
  • -F'|' - 默认情况下,awk按单个空格将记录/行/行拆分为列,但使用|,awk按管道拆分

上面的一个可以写成

Path=$( awk -F '|' '{ print $1 }' <<< "$line" )

假设说

$ line="1|2|3"
$ Path=$( awk -F '|' '{ print $1 }' <<< "$line" )
$ echo $Path; # you get first column
1

相同
$ Path=$( cut -d'|' -f1 <<< "$line" )
$ echo $Path;
1

答案 4 :(得分:-1)

默认字段分隔符为'',如果您有-F,则表示将默认分隔符更改为'|'