![](/img/trans.png)
[英]How to cut the nth line of file by using the value of the nth line from another file?
[英]How to select the nth char from a string for each line in a file?
每一行都有一個單詞和一個數字。 我需要以某種方式選擇第n個字母,它們將共同構成一個新詞。 例如:
and 3
for 3
map 2
wrestle 1
draw
它必須像這樣開始
cat char.txt | ...
我只允許使用sed(沒有awk,perl,...)。
我知道如何選擇所有數字
sed 's/\(.*\) \(.*\)/\2/g'
或文字
sed 's/\(.*\) \(.*\)/\1/g'
而我在考慮
cat char.txt | head -c $(sed 's/\(.*\) \(.*\)/\2/g') | tail -c 1 | sed 's/\n\//g'
但它不會起作用,因為它不會迭代思考所有的行,並且由於某種原因它甚至不會在一行上工作。
需要一些幫助和指導
泰
while read w n; do echo -n ${w:(($n-1)):1}; done < filename
輸出:
draw
${parameter:offset:length}:
Substring Expansion. Expands to up to length characters of parameter
starting at the character specified by offset.
這是一個解決這個難題的sed腳本,假設找到的數字在1-9范圍內:
s/ /@@@@@@@@@@ /
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 1$/\1/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 2$/\2/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 3$/\3/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 4$/\4/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 5$/\5/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 6$/\6/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 7$/\7/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 8$/\8/
s/\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\).* 9$/\9/
H
$!D
${x;s/\n//g;}
第一行用@
s填充當前行上的字,以確保字段中至少有10個字符。 9個后續行用給定位置的字符替換模式空間。 H
將該字符存儲在保留空間中,前面帶有換行符。 除非讀取了最后一行,否則我們將丟棄模式空間並重新開始。 如果已經讀取了最后一行,我們將模式空間與保留空間交換,保留空間保存所需的單詞垃圾郵件,我們刪除了換行符。
將其保存在文件script.sed
我們獲取
% sed -f script.sed < data
draw
實施支持1-19范圍內的字符偏移的版本的迷人練習留給讀者練習。
我們可以用awk
更輕松地解決這個難題:
% awk '{answer=answer substr($1,$2,1)}END{print(answer)}' < data
draw
僅使用sed(抱歉避免使用cat char.txt: - ;
sed -n ':a
/1$/ !{
s/.//
h
s/.* \([0-9]\)$/\1/
y/98765432/87654321/
G
s/\(.\)\n\(.*\) [0-9]/\2 \1/
b a
}
s/\(.\).*/\1/p' char.txt
假設您只采用第1列到第9列(單個數字),但可以通過適應“巨大數字”進行擴展。 它也可以通過'簡單'在每行寫一個字符1 char(所以verticaly)。 也可以修改bu重載代碼。
釋
原則:如果最后一位不是1,則刪除第一個字符並減少1.如果它等於1,則打印該行的第一個字符。
/1$/
y/98765432/87654321/
s/.//
刪除第一個字符 s/\\(.\\).*/\\1/p
打印s/\\(.\\).*/\\1/p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.