我試圖使用tr命令來分割tab字符。它看起來不像是在作業:
IFS=""。
for l in `cat gift.txt`。
do
arr=($(echo $l | tr " "/span> " ")
echo ${arr[1]}
done
the gift.txt內容:
4014 apple
4015書
4016 糖果
4017糖
該腳本沒有列印任何東西!
uj5u.com熱心網友回復:
我使用了一個while回圈,因為我自己通常使用它,并假定你想讀取每一行,然后用單空格替換tab。
-bash-4.2$ cat script.sh
#!/bin/bash
while IFS= read -r line
do
echo "$line"/span>
arr=$(echo "$line" | tr " " ")
echo "$arr"。
done < gift.txt
-bash-4.2$ cat gift.txt
4014 蘋果
4015 書
4016 糖果
4017 糖
-bash-4.2$ ./script.sh
4014 蘋果
4014 蘋果
4015 書
4015書
4016 糖果
4016 糖果
4017糖
4017糖
添加另一個包括陣列的代碼段,因為它最初是在問題中使用的。
-bash-4.2$ cat gift.txt
4014 蘋果
4015 書
4016 糖果
4017 糖
-bash-4.2$ cat script.sh
#!/bin/bash
declare -a arr=()
while IFS= read -r line
do
#echo "$line"
arr =$(echo "$line"| tr " " ")
arr ="|" "
done < gift.txt
for i in "{span class="hljs-variable">${arr[@]}"
do
echo $i | awk -F"|" '{print 1"
"$2"
"$3"
"4}'
done
-bash-4.2$ ./script.sh
4014 蘋果
4015 書
4016 糖果
4017 糖
uj5u.com熱心網友回復:
這就更直接了當了 :
`gawk/mawk/mawk2 'BEGIN{FS="^$"} gsub(/11/," ") 1'/span>`
這就是你需要的一切。
最后的 1是為了在沒有替換的情況下仍然列印出原樣的行。如果你只需要修改過的行,那么請隨意去掉那個 1。
[g/m/n]awk 'gsub(/11/, " ") 1'
這是awk的一個很好的使用案例。標準的大括號 print 陳述句在這里是完全可有可無的,因為我們正在利用由 gsub 回傳的修改過的實體計數器作為測驗條件的輸入,如果它是真的,則默認為列印動作。
因此,簡單的 Gsub 陳述句已經足夠了。
*ps 我的意思是跳過 bash 陣列或回圈,一次性發送。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307698.html
標籤:
上一篇:將串列項與其他列的值串聯起來
下一篇:根據匹配的符號來復制檔案
