cleanup structure
This commit is contained in:
158
examples/06_data_processing.luash
Normal file
158
examples/06_data_processing.luash
Normal file
@@ -0,0 +1,158 @@
|
||||
#!/usr/bin/env luash
|
||||
-- Data Processing Demo: File processing, text manipulation, and analysis
|
||||
|
||||
print("=== Data Processing with Luash ===\n")
|
||||
|
||||
-- Create sample data for demonstration
|
||||
print("1. Creating Sample Data:")
|
||||
sample_data = [[timestamp,user,action,value
|
||||
2024-01-01 10:00:00,alice,login,1
|
||||
2024-01-01 10:05:00,bob,purchase,25.50
|
||||
2024-01-01 10:10:00,alice,logout,1
|
||||
2024-01-01 10:15:00,charlie,login,1
|
||||
2024-01-01 10:20:00,bob,purchase,15.75
|
||||
2024-01-01 10:25:00,charlie,purchase,45.00]]
|
||||
|
||||
-- Write sample data to file
|
||||
local file = io.open("sample_data.csv", "w")
|
||||
file:write(sample_data)
|
||||
file:close()
|
||||
print(" Sample CSV data created: sample_data.csv")
|
||||
|
||||
-- File analysis using shell commands
|
||||
print("\n2. File Analysis:")
|
||||
line_count = `wc -l < sample_data.csv`
|
||||
print(" Total lines: " .. line_count)
|
||||
|
||||
file_size = `du -h sample_data.csv | cut -f1`
|
||||
print(" File size: " .. file_size)
|
||||
|
||||
-- Data extraction and filtering
|
||||
print("\n3. Data Extraction:")
|
||||
print(" Purchase transactions:")
|
||||
!grep "purchase" sample_data.csv
|
||||
|
||||
-- Using Lua for more complex processing
|
||||
print("\n4. Advanced Processing with Lua:")
|
||||
local data_file = io.open("sample_data.csv", "r")
|
||||
local purchases = {}
|
||||
local users = {}
|
||||
|
||||
-- Skip header line
|
||||
data_file:read("*line")
|
||||
|
||||
-- Process each line
|
||||
for line in data_file:lines() do
|
||||
local timestamp, user, action, value = line:match("([^,]+),([^,]+),([^,]+),([^,]+)")
|
||||
|
||||
if action == "purchase" then
|
||||
table.insert(purchases, {
|
||||
timestamp = timestamp,
|
||||
user = user,
|
||||
amount = tonumber(value)
|
||||
})
|
||||
end
|
||||
|
||||
users[user] = true
|
||||
end
|
||||
data_file:close()
|
||||
|
||||
-- Calculate statistics
|
||||
local total_amount = 0
|
||||
local purchase_count = #purchases
|
||||
for i = 1, purchase_count do
|
||||
total_amount = total_amount + purchases[i].amount
|
||||
end
|
||||
|
||||
local user_count = 0
|
||||
for user, _ in pairs(users) do
|
||||
user_count = user_count + 1
|
||||
end
|
||||
|
||||
print(" Statistics:")
|
||||
print(" - Total users: " .. user_count)
|
||||
print(" - Total purchases: " .. purchase_count)
|
||||
print(" - Total revenue: $" .. string.format("%.2f", total_amount))
|
||||
print(" - Average purchase: $" .. string.format("%.2f", total_amount / purchase_count))
|
||||
|
||||
-- Log file processing
|
||||
print("\n5. Log Processing:")
|
||||
log_content = `tail -20 /var/log/system.log 2>/dev/null || echo "Log not accessible"`
|
||||
if log_content ~= "Log not accessible" then
|
||||
print(" Recent system log entries found")
|
||||
else
|
||||
-- Create a sample log for demonstration
|
||||
sample_log = [[2024-01-01 10:00:01 INFO: Application started
|
||||
2024-01-01 10:00:05 DEBUG: Database connection established
|
||||
2024-01-01 10:00:10 WARN: High memory usage detected
|
||||
2024-01-01 10:00:15 ERROR: Failed to connect to external API
|
||||
2024-01-01 10:00:20 INFO: Retrying API connection
|
||||
2024-01-01 10:00:25 INFO: API connection restored]]
|
||||
|
||||
local log_file = io.open("sample.log", "w")
|
||||
log_file:write(sample_log)
|
||||
log_file:close()
|
||||
|
||||
print(" Created sample.log for demonstration")
|
||||
print(" Log analysis:")
|
||||
|
||||
-- Count log levels
|
||||
error_count = `grep -c "ERROR" sample.log`
|
||||
warn_count = `grep -c "WARN" sample.log`
|
||||
info_count = `grep -c "INFO" sample.log`
|
||||
|
||||
print(" - Errors: " .. error_count)
|
||||
print(" - Warnings: " .. warn_count)
|
||||
print(" - Info messages: " .. info_count)
|
||||
end
|
||||
|
||||
-- Text transformation
|
||||
print("\n6. Text Transformation:")
|
||||
input_text = "Hello World, this is a TEST message"
|
||||
|
||||
-- Using shell commands for text processing
|
||||
upper_text = `echo "` .. input_text .. `" | tr '[:lower:]' '[:upper:]'`
|
||||
print(" Uppercase: " .. upper_text)
|
||||
|
||||
word_count = `echo "` .. input_text .. `" | wc -w`
|
||||
print(" Word count: " .. word_count)
|
||||
|
||||
-- Using Lua for more complex transformations
|
||||
words = {}
|
||||
for word in input_text:gmatch("%w+") do
|
||||
table.insert(words, word)
|
||||
end
|
||||
|
||||
print(" Words: " .. table.concat(words, ", "))
|
||||
print(" Reversed: " .. table.concat(words, " "):reverse())
|
||||
|
||||
-- Batch file processing
|
||||
print("\n7. Batch Processing:")
|
||||
-- Create multiple sample files
|
||||
for i = 1, 3 do
|
||||
local batch_file = io.open("batch_" .. i .. ".txt", "w")
|
||||
batch_file:write("Sample content for file " .. i .. "\n")
|
||||
batch_file:write("Line 2 of file " .. i .. "\n")
|
||||
batch_file:close()
|
||||
end
|
||||
|
||||
print(" Created 3 batch files")
|
||||
|
||||
-- Process all batch files
|
||||
batch_files = `ls batch_*.txt`
|
||||
total_lines = 0
|
||||
|
||||
for filename in batch_files:gmatch("[^\n]+") do
|
||||
local lines = `wc -l < ` .. filename
|
||||
total_lines = total_lines + tonumber(lines)
|
||||
print(" " .. filename .. ": " .. lines .. " lines")
|
||||
end
|
||||
|
||||
print(" Total lines across all files: " .. total_lines)
|
||||
|
||||
-- Cleanup
|
||||
print("\n8. Cleanup:")
|
||||
!rm -f sample_data.csv sample.log batch_*.txt
|
||||
print(" Temporary files cleaned up")
|
||||
|
||||
print("\n✓ Data processing demo completed!")
|
||||
Reference in New Issue
Block a user