แทนที่พื้นที่ว่างค่าที่หายไปด้วยศูนย์


13

ฉันมีไฟล์ข้อความที่คั่นด้วยแท็บ input.txt ประมาณ 30K บรรทัดฉันต้องการตรวจสอบแต่ละแถว (s1..s30K บรรทัด) สำหรับค่าที่หายไป (เช่นพื้นที่ว่าง) และเติมค่าที่หายไปด้วยค่าศูนย์ดู out.txt

input.txt

 id  no1  no2  no3  no4
 s1  23   34   45   12
 s2       4    4      
 s3  4         8    0

out.txt

id  no1  no2  no3  no4
s1  23   34   45   12
s2  0     4    4    0  
s3  4     0    8    0

คำตอบ:


14

คุณสามารถทำได้เช่นนี้ด้วย awk:

awk 'BEGIN { FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = 0 }; 1' file

คำอธิบาย

การตั้งค่าแท็บ FS และ OFS to ให้แน่ใจว่าเอาต์พุตถูกคั่นอย่างถูกต้อง for-loop มองไปที่ทุก ๆ ฟิลด์และตั้งค่าเป็นศูนย์ถ้ามันว่างเปล่า { print $0 }หนึ่งในตอนท้ายคือชวเลขเป็น


5

ฉันต้องการ:

sed 's/<TAB> /<TAB>0/g' <input.txt >output.txt

แทนที่<TAB>ด้วยอักขระ TAB จริง (โดยทั่วไปจะได้รับจากการกดปุ่มCtrl-Vแล้วTab)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.