簡體   English   中英

將awk輸出存儲在變量中

[英]store awk output in variable

我忽略了這段代碼的問題是什么?

#! /bin/bash
File1=$1
for (( j=1; j<=3; j++ ))
{
    output=$(`awk -F; 'NR=='$j'{print $3}' "${File1}"`)
    echo ${output}
}

File1看起來像這樣:

Char1;2;3;89
char2;9;6;66
char5;3;77;8

我想在每一行上提取循環字段3

所以結果會是

3
6
7

它應該是這樣的:

#! /bin/bash
File1=$1
for (( j=1; j<=3; j++ ))
{
                output=$(awk -F ';' 'NR=='$j' {print $3}' "${File1}")
                echo ${output}
}

它在我的CentOS上運行良好。

  1. 你在整個地方混合單引號和反引號,而不是逃避它們
  2. 如果不使用-v標志,則不能在awk腳本中使用bash變量
  3. awk已經在循環中工作,所以沒有理由循環循環...

只是:

awk -F";" '{print $3}' "${file1}"

將完成您的整個腳本現在正在嘗試做的事情。

更簡單,使用cut實用程序: cut -d';' -f3 cut -d';' -f3將生成您正在查找的結果,其中-d指定要使用的分隔符, -f指定您要查找的字段/列(1索引)。

如果您只想從結構化文件中提取列,就像您擁有的那樣,請使用cut實用程序。

cut將允許您指定數據中的分隔符( ; )以及要提取的列(第3列)。

cut -d';' -f3 "$file1"

如果您想循環遍歷此結果,請使用while循環並逐個read值:

cut -d';' -f3 "$file1" |
while read data; do
  echo "data is $data"
done

您想要變量中的值,請執行此操作

var=$( cut -d';' -f3 "$file1" | tr '\n' ' ' )

tr '\\n' ' '位用空格替換換行符,因此你可以得到3 6 77作為字符串。

將它們放入數組中:

declare -a var=( $( cut -d';' -f3 "$file1" ) )

(這里不需要tr

然后,您可以訪問${var[0]}${var[1]}等值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM