কিভাবে একটি শেল স্ক্রিপ্টে একাধিক লাইন awk স্ক্রিপ্ট সংহত করতে হয়


12

আমার প্রশ্ন একটি ধারাবাহিকতা

"গোষ্ঠী নম্বর" এ রাখা 3 ডিজিটের সংখ্যা বের করার জন্য কীভাবে একটি ফাইলকে পার্স করবেন

আমি একক শেল স্ক্রিপ্টে একত্রিত করার চেষ্টা করছি যাতে কমান্ডের একটি সিরিজ থাকে

  1. পরীক্ষার ক্রম বের করার জন্য ইউরোপীয় মানকে পার্স করুন

  2. পাঠ্য এনকোডিংগুলি utf8 তে রূপান্তর করুন

  3. উপরের পোস্টে আমাকে সরবরাহ করা বিশুদ্ধ রুটিনের সাথে ফলাফলটি প্রক্রিয়া করুন।

  4. গন্তব্য ফাইলে সামগ্রী সংরক্ষণ করুন

আমি অস্থায়ীভাবে নীচে স্ক্রিপ্ট লিখেছি। আমি কেবল অর্জন করতে সক্ষম , step 1এবং step 4নাও step 2নয় step 3। আমি ভাবছি যদি মধ্যবর্তী (অস্থায়ী) ফাইল (গুলি) তৈরি করা উচিত। আমি মধ্যবর্তী পদক্ষেপের আউটপুটটিকে ভেরিয়েবলগুলিতে সঞ্চয় করার চেষ্টা করেছি, তবে সাফল্য ছাড়াই। সম্ভাব্য ভুল এবং এটি করার সর্বোত্তম উপায় সম্পর্কিত যে কোনও সহায়তা হ'ল সহায়তা।

#!/bin/bash
# creating the Latex code for a test procedure

awkcommand= "/usr/bin/awk
 '
    $1 == "Group" {printf("\\section{%s %d}\n", $1, $2); next}
    {
      title = sep = ""
      for (i=1; i<=NF; i++) 
        if ($i ~ /^[0-9][0-9][0-9]$/) {
          printf("\\subsection{%s} \n\\TestDetails{%d}\n", title, $i)
          break
        }
        else {
          title = title sep $i
          sep = FS
        }
    }
' 
"

sourcefolder="/Users/yves/Desktop/Test-folder-parsing/"
sourcefile="NFEN3545-001.pdf"
destfile="Latex-code.tex"
destfolder=$sourcefolder
destinationfilepath=${destfolder}${destfile}
extractioncmd="/usr/local/bin/pdftotext -layout -f 54 -l 54"
modifier=" -"
#textencodingcmd="/usr/bin/iconv -f L1 -t UTF-8" # Needed but not used

${extractioncmd}  ${sourcefolder}${sourcefile} ${modifier}  >  $destinationfilepath
exit 0

2
শেল ভেরিয়েবলের কমান্ডগুলি সংরক্ষণ করা এমন একটি পদ্ধতি যা অনেক ঝামেলার দিকে পরিচালিত করে।
এনজোটিব

1
তিনি কি বলেছিলেন, কোদাল মধ্যে। mywiki.wooledge.org/BashFAQ/050
ট্রিপলি

@Anthon। আপনি কীভাবে কমান্ডগুলির একটি সুন্দর তালিকা তৈরি করলেন? আমি ব্যর্থ চেষ্টা করেছি, এবং আমার দ্বিতীয় মন্তব্যেও একই সমস্যা রয়েছে, আরও খারাপ ....
ইয়ভেস

@Yves। খালি লাইন 1. এক্সএক্সএক্স নিউলাইন / খালি লাইন ২ .. .. ইত্যাদি তবে সহজতমটি আবার একবার সম্পাদনাতে ক্লিক করা এবং মার্ক আপটি দেখুন। উপরের অংশে ডানদিকে আপনার কমলা প্রশ্ন চিহ্ন থাকতে পারে, যা ফর্ম্যাটিংয়ের বিষয়ে ব্যাখ্যা করে (আপনার খ্যাতির উপর নির্ভর করে আপনার এটি নাও থাকতে পারে) আপনি সর্বদা সম্পাদনা বাতিল করতে পারেন। মন্তব্যে তবে আপনার তুলনায় অনেক কম ফর্ম্যাটিং ক্ষমতা রয়েছে ( [Add Comment]মন্তব্যে কী অনুমোদিত তা দেখার জন্য বোতামের নীচে সহায়তায় ক্লিক করুন )। (সেক্ষেত্রে আপনি নিজের মূল পোস্টটি আপডেট করার চেয়ে ভাল হতে পারেন)।
অ্যানথন

উত্তর:


15

আপনি কোডটি /usr/bin/awkএকটি ভেরিয়েবল এবং /usr/bin/awkএর মতো পৃথক ভেরিয়েবেলে সংরক্ষণ করতে পারেন (অচিহ্নিত):

awk=/usr/bin/awk

awkcommand='
$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}
{
title = sep = ""
for (i=1; i<=NF; i++) 
  if ($i ~ /^[0-9][0-9][0-9]$/) {
    printf("\subsection{%s} \n\TestDetails{%d}\n", title, $i)
    break
  }
  else {
    title = title sep $i
    sep = FS
  }
}
'

ব্যবহার:

$awk "$awkcommand"

নোট করুন যে আমি ডাবল উদ্ধৃতি চিহ্নগুলি একক উদ্ধৃতি চিহ্নগুলিতে পরিবর্তন করেছি। ডাবল উদ্ধৃতি চিহ্নের $iমধ্যে শেল ভেরিয়েবলের বিষয়বস্তু দ্বারা প্রতিস্থাপিত হয় i। একক উদ্ধৃতি চিহ্নের মধ্যে এটি আক্ষরিক $i, যা awkপ্রত্যাশা করে।

এছাড়াও, আপনি স্ট্রিংয়ের মধ্যে দ্বিগুণ উদ্ধৃতি চিহ্নগুলি এড়িয়ে যাচ্ছেন awkনা তাই কখনও দেখেনি

$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}

পরিবর্তে, এটা দেখেছি

<contents of shell $1> == Group {printf(\section{%s %d}\n, <contents of shell $1>, <contents of shell $2>); next}

যদি $1এবং $2খালি ছিল, awkদেখেছি

 == Group {printf(\section{%s %d}\n, , ); next}

আপনি কি নিশ্চিত যে কমান্ডের অবস্থানটি সংরক্ষণ করা প্রয়োজনীয়? আপনি সাধারণত awkআপনার ব্যবহারকারীর পথে কোনও ডিরেক্টরি খুঁজে পাওয়ার উপর নির্ভর করতে পারেন । আপনি যদি পুরো পথটি ব্যবহার না awkকরেন তবে প্যারামিটারাইজ করার কোনও কারণ নেই awk


ধন্যবাদ। আমি এখন awk কমান্ডের কাজটি করতে সক্ষম হয়েছি: $ এক্সট্রাকশনসিএমডি $ {সোর্স ফোল্ডার} $ {সোর্সফায়াল} $ {সংশোধক} | $ awk "$ awkcommand"> $ গন্তব্যফলকপথ যাইহোক, একই wiht আইকনভ করার চেষ্টা করা কার্যকর হয় না: আইকনভি = / usr / বিন / আইকনভ পরম = "-f এল 1 -t ইউটিএফ -8" $ এক্সট্রেশনসিএমডি $ {উত্স ফোল্ডার} $ { উত্সফল} $ {সংশোধক। | $ আইকনভ "$ পরম" | $ awk "$ awkcommand"> $ গন্তব্য ফাইলপ্লে # টি কাজ করে না, লক্ষ্য ফাইলটি খালি is বিটিডাব্লু, যে কারণে আমি পুরো পথটি ব্যবহার করেছি তা হ'ল আমি এটিকে টিউটোরিয়ালে প্রস্তাবিত অনুশীলন হিসাবে পড়ি।
ইয়ভেস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.