[英]how to concatenate the grep output and the indexed string in bash?
[英]Concatenate grep output string (bash script)
我正在使用bash腳本(Ubuntu 12.10)處理文本文件中的某些數據。
基本思想是我使用grep從文件中選擇了某一行。 接下來,我處理該行以獲取sed的數字。 grep和sed命令都可以使用。 我可以回音。
但是將結果與字符串連接是錯誤的。
當我從變量或文件執行grep命令時,組合字符串時會得到不同的結果。 當我grep文件時,串聯出錯。 當我用與文件中相同的文本grep一個變量時,它可以按預期工作。
文件中的grep我在做什么?
test.pdb的內容
REMARK overall = 324.88
REMARK bon = 24.1918
REMARK coup = 0
我的劇本
#!/bin/bash
#Correct function
echo "Working code"
TEXT="REMARK overall = 324.88\nREMARK bon = 24.1918\nREMARK coup = 0\n"
DATA=$(echo -e $TEXT | grep 'overall' | sed -n -e "s/^.*= //p" )
echo "Data: $DATA"
DATA="$DATA;0"
echo $DATA
#Not working
echo ""
echo "Not working code"
DATA=$(grep 'overall' test.pdb | sed -n -e "s/^.*= //p")
echo "Data: $DATA"
DATA="$DATA;0"
echo $DATA
產量
Working code
Data: 324.88
324.88;0
Not working code
Data: 324.88
;04.88
我因同樣的問題而發瘋。
真正的問題是您的“ test.pdb”可能具有錯誤的EOL(行尾)字符。
Linux EOL:LF(又名\\ n)
Windows EOL:CR LF(又名\\ r \\ n)
這意味着echo和grep將對這個額外的字符(\\ r)產生問題,幸運的是tr,sed和awk正確地對其進行了管理。
因此,您也可以嘗試:
DATA = $(grep'overall'test.pdb | sed -n -e“ s /^.*= // p” | sed -e 2s / \\ r $ //“)
要么
DATA = $(grep'overall'test.pdb | sed -n -e“ s /^.*= // p” | tr -d'\\ r')
嘗試這個:
SUFFIX=";0"
DATA="${DATA}${SUFFIX}"
使用awk ,我想它會更可靠,更干凈:
$ awk '$2=="overall"{print "Working code\nData: " $4 "\n" $4 ";0"}' file.txt
Working code
Data: 324.88
324.88;0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.