एक शेल उपकरण इनपुट डेटा "tablify" करने के लिए


33

बहुत समय पहले मुझे याद आया कि मैं एक कमांड का उपयोग कर रहा हूं जो अपने इनपुट को अच्छी तरह से फॉर्मेट की गई तालिका में बनाता है।

उदाहरण के लिए, इस इनपुट के लिए,

apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30

आउटपुट इस के समान होगा:

apple     1    100
orange    20   19
pineapple 1000 87
avocado   4    30

मैं इस उपकरण का नाम जानना चाहूंगा।

जवाबों:



0

awk समाधान जो स्टड से संबंधित है

चूंकि columnPOSIX नहीं है, शायद यह है:

mycolumn() (
  file="${1:--}"
  if [ "$file" = - ]; then
    file="$(mktemp)"
    cat >"${file}"
  fi
  awk '
  FNR == 1 { if (NR == FNR) next }
  NR == FNR {
    for (i = 1; i <= NF; i++) {
      l = length($i)
      if (w[i] < l)
        w[i] = l
    }
    next
  }
  {
    for (i = 1; i <= NF; i++)
      printf "%*s", w[i] + (i > 1 ? 1 : 0), $i
    print ""
  }
  ' "$file" "$file"
  if [ "$file" = - ]; then
    rm "$file"
  fi
)

परीक्षा:

printf '12 1234 1
12345678 1 123
1234 123456 123456
' > file

टेस्ट कमांड:

mycolumn file
mycolumn <file
mycolumn - <file

सभी के लिए आउटपुट:

      12   1234      1
12345678      1    123
    1234 123456 123456

यह भी देखें:


0

अपेक्षाकृत छोटी फ़ाइलों के लिए, (जहां बाइट्स में लंबाई से कम है getconf ARG_MAX), और इनपुट आकार अधिक या कम ज्ञात हैं, (मान लें कि कोई फल का नाम 18 अक्षरों से अधिक लंबा नहीं है), printfउपयोगी हो सकता है, यहां एक bashउदाहरण है:

 printf '%-20s %5s %5s\n' $(<file.txt)

आउटपुट:

apple                    1   100
orange                  20    19
pineapple             1000    87
avocado                  4    30

नोट कैसे संख्या रहे हैं सही जायज।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.