मेरे पास एक टेक्स्ट फ़ाइल test.txt है जिसमें निम्न के रूप में प्रविष्टियां हैं:

a line of text
another line
asdf
vkqaoc
coeiam
cieksm
pqocqoci
xmckdow
cqpszls
etc
etc etc etc

मुझे एक लाइन खोजने और उसके बाद आने वाली लाइन को बदलने की जरूरत है। मैं awk का उपयोग करके निम्नलिखित के साथ आया हूं जो उस लाइन को लौटाता है जिसे मैं बदलना चाहता हूं लेकिन मैं awk के साथ अच्छा नहीं हूं और मुझे उस लाइन को संशोधित करने का एक तरीका चाहिए:

awk '/cieksm/{getline; print}' ./test.txt
pqocqoci

मैं pqocqoci-changed कहने के लिए awk का उपयोग करके उस पंक्ति को कैसे संशोधित कर सकता हूं या कोई बेहतर तरीका है? सहायता की बहुत सराहना की और धन्यवाद!

1
Kyle 26 जिंदा 2022, 20:10
यह आपकी मदद कर सकता है।
 – 
potong
26 जिंदा 2022, 20:17

3 जवाब

इस तरह की चीज़ को ध्वज के साथ ढूढ़ना अक्सर आसान होता है:

awk 'f{$0 = $0 "-changed"} 1{print} { f=/cieksm/}' test.txt

या (डिफ़ॉल्ट नियम का उपयोग करके)

awk 'f{$0 = $0 "-changed"} 1; { f=/cieksm/}' test.txt
2
William Pursell 26 जिंदा 2022, 20:54

यह स्पष्ट नहीं है (मेरे लिए) अपेक्षित आउटपुट

  1. स्टडआउट करने के लिए बस pqocqoci-changed प्रिंट करें?
  2. पूरी फ़ाइल को stdout में प्रिंट करें लेकिन pqocqoci को . में बदलें pqocqoci-changed?
  3. pqocqoci को pqocqoci-changed में बदलकर स्रोत फ़ाइल को अपडेट करें?

1: OP के वर्तमान awk कोड में छोटा संशोधन:

$ awk '/cieksm/{getline var; print var "-changed"}' ./test.txt
pqocqoci-changed

2: सभी लाइनों को stdout में डंप करने के लिए कोड जोड़ना

$ awk '{print}/cieksm/{getline var; print var "-changed"}' ./test.txt
pqocqoci-changed

a line of text
another line
asdf
vkqaoc
coeiam
cieksm
pqocqoci-changed
xmckdow
cqpszls
etc
etc etc etc

3: स्रोत फ़ाइल को अपडेट करने के लिए GNU awk का उपयोग करना:

$ awk -i inplace '{print}/cieksm/{getline var; print var "-changed"}' ./test.txt
$ cat ./test.txt
a line of text
another line
asdf
vkqaoc
coeiam
cieksm
pqocqoci-changed
xmckdow
cqpszls
etc
etc etc etc
1
markp-fuso 26 जिंदा 2022, 20:24

जीएनयू का उपयोग करना sed

$ sed '/cieksm/{n;s/.*/&-changed/}' input_file
a line of text
another line
asdf
vkqaoc
coeiam
cieksm
pqocqoci-changed
xmckdow
cqpszls
etc
etc etc etc
1
HatLess 26 जिंदा 2022, 20:55
2
GNU sed केवल मुझे लगता है -- कम से कम BSD sed पर कार्य नहीं करता है।
 – 
dawg
26 जिंदा 2022, 20:53